﻿
using Practico2.Business;
using Practico2.DataTypes;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Services;
using System.Web.Services.Protocols;
using System.Xml;

namespace Practico2.WebServices
{
    /// <summary>
    /// Descripción breve de Service1
    /// </summary>
    [WebService(Namespace = "http://tempuri.org/")]
    [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
    [System.ComponentModel.ToolboxItem(false)]
    // Para permitir que se llame a este servicio web desde un script, usando ASP.NET AJAX, quite la marca de comentario de la línea siguiente. 
    // [System.Web.Script.Services.ScriptService]
    public class Service1 : System.Web.Services.WebService
    {
        public AuthHeader Authentication;

        [SoapHeader("Authentication")]
        [WebMethod]
        public string ObtenerCiudadData(String selectedCity)
        {

            if (!UsuariosWebService.CredencialesValidas(Authentication.Username, Authentication.Password))
            {

                return "Nombre de usuario o contraseña invalidos";
            }
            else
            {
                // selected city es la ciudad seleccionada en el autocomplete, por lo tanto es de la forma
                // "nombrePais, nombreCiudad" que es lo que devuelve el FiltrarCiudades
                String[] cityAndCountry = selectedCity.Split(new Char[] { ',' });
                if (cityAndCountry.Length == 2)
                {
                    // obtengo las partes del texto seleccionado por el usuario
                    String countryName = cityAndCountry[0];
                    String cityName = cityAndCountry[1];
                    // obtengo el pais y ciudad especificos
                    DTPais pais = PaisManager.ObtenerPaiseSegunNombre(countryName.Trim());
                    DTCiudad ciudad = CiudadManager.ObtenerCiudadSegunNombre(cityName.Trim());

                    // obtengo los datos del tiempo para la ciudad
                    String weatherUrl = "http://weather.service.msn.com/data.aspx?weadegreetype=C&culture=es-ES&weasearchstr={0}";
                    XmlDocument xmlRss = new XmlDocument();
                    xmlRss.Load(string.Format(weatherUrl, ciudad.NombreCiudad + "," + pais.AbreviacionPais));
                    // obtengo un json a partir del xml (sin las propiedades ni nada...)
                    String jsonText = getWeatherAsJSON(xmlRss);


                    if (pais != null && ciudad != null)
                    {
                        String result = "{";
                        result += "\"country\":\"" + pais.AbreviacionPais + "\",";
                        result += "\"cityName\":\"" + ciudad.NombreCiudad + "\",";
                        result += "\"lon\":\"" + ciudad.LongitudCiudad + "\",";
                        result += "\"lat\":\"" + ciudad.LatitudCiudad + "\",";
                        result += "\"weather\":" + jsonText + "";
                        result += "}";

                        return result;
                    }
                }
                return "";
            }
        }

        private static string getWeatherAsJSON(XmlDocument xmlRss)
        {
            string xmlRoot = "/weatherdata/weather";
            xmlRss.SelectSingleNode(xmlRoot);
            String Fecha = xmlRss.SelectSingleNode(xmlRoot + "/current").Attributes["date"].InnerText;
            String Condicion = xmlRss.SelectSingleNode(xmlRoot + "/current").Attributes["skytext"].InnerText;
            String Code = xmlRss.SelectSingleNode(xmlRoot + "/current").Attributes["skycode"].InnerText;
            String Temp = xmlRss.SelectSingleNode(xmlRoot + "/current").Attributes["temperature"].InnerText;
            String Humedad = xmlRss.SelectSingleNode(xmlRoot + "/current").Attributes["humidity"].InnerText;
            String Viento = xmlRss.SelectSingleNode(xmlRoot + "/current").Attributes["winddisplay"].InnerText;
            String Sensacion = xmlRss.SelectSingleNode(xmlRoot + "/current").Attributes["feelslike"].InnerText;


            string result = "{";
            result += "\"skytext\":\"" + Condicion + "\",";
            result += "\"skycode\":\"" + Code + "\",";
            result += "\"temperature\":\"" + Temp + "\",";
            result += "\"humidity\":\"" + Humedad + "\",";
            result += "\"winddisplay\":\"" + Viento + "\",";
            result += "\"feelslike\":\"" + Sensacion + "\",";
            result += "\"date\":\"" + Fecha + "\"";
            result += "}";

            return result;
        }
    }
}